//package com.ls.fw.index.solr.client.test;
//
//import java.lang.reflect.Field;
//import java.lang.reflect.Method;
//import java.sql.Time;
//import java.sql.Timestamp;
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import com.ls.fw.common.beanparser.schema.Column;
//
//public class BeanHandler {
//
//	public static final String GET = "get";
//	public static final String SET = "set";
//	public static final String IS = "is";
//
//	// 是否将日期转化为数字
//	private boolean dateToLong = false;
//
//	public static void main(String[] args) throws SecurityException,
//			NoSuchMethodException, Exception {
//		Model1 d = new Model1();
//		d.setId(1L);
//		d.setName("d");
//		User1 user = new User1();
//		user.setId(1L);
//		user.setName("dd");
//		d.setUser(user);
//		BeanHandler handl = new BeanHandler();
//		handl.handle(d, List.class, User1.class);
//		System.out.println(handl.isCollection(List.class));
//		System.out.println(handl.isMap(Map.class));
//		System.out.println(handl.isMap(HashMap.class));
//		System.out.println(handl.isDate(Date.class));
//		System.out.println(handl.isDate(Time.class));
//		System.out.println(handl.isDate(Timestamp.class));
//	}
//
//	
//	/**
//	 * 反射对象，获取对象的属性
//	 * @param obj
//	 * @param excludeType
//	 * @return
//	 * @throws SecurityException
//	 * @throws NoSuchMethodException
//	 * @throws Exception
//	 */
//	public List<Column> handle(Object obj, final Class<?>... excludeType)
//			throws SecurityException, NoSuchMethodException, Exception {
//		String tableName = firtCharToLower(obj.getClass().getSimpleName());
//		List<Column> list = new ArrayList<Column>();
//		Field[] fields = obj.getClass().getDeclaredFields();
//		boolean include = false;
//		for (Field field : fields) {
//			include = isInclude(field.getType(), excludeType);
//			if (!include) {
//				Object value = getValue(obj, field);
//				Column c = new Column(tableName, field.getName(), value);
//				list.add(c);
//				System.out.println(field.getName() + "=" + value + ","
//						+ (value != null ? value.getClass() : ""));
//			} else {
//				System.out.println("excludeType:" + field.getName() + ","
//						+ field.getType());
//			}
//
//		}
//		return list;
//	}
//
//	/**
//	 * 类型type是否包含在excludeType类型中
//	 * 
//	 * @param type
//	 * @param excludeType
//	 * @return
//	 */
//	private boolean isInclude(Class<?> type, final Class<?>... excludeType) {
//		boolean include = false;
//		if (excludeType != null) {
//			for (Class<?> class1 : excludeType) {
//				if (class1.equals(type)) {
//					include = true;
//					break;
//				}
//				if (type.isAssignableFrom(class1)) {
//					include = true;
//					break;
//				}
//			}
//		}
//		return include;
//	}
//
//	/**
//	 * 获取字段的值
//	 * 
//	 * @param obj
//	 * @param field
//	 * @param excludeType
//	 * @return
//	 * @throws SecurityException
//	 * @throws NoSuchMethodException
//	 * @throws Exception
//	 */
//	public Object getValue(final Object obj, final Field field)
//			throws SecurityException, NoSuchMethodException, Exception {
//
//		Object value = null;
//		Class<?> type = field.getType();
//		if (String.class.equals(type)) {
//			Method m = (Method) obj.getClass().getMethod(
//					GET + firtCharToUpper(field.getName()));
//			value = (String) m.invoke(obj);
//		} else {
//			value = getBaseTypeValue(obj, field);
//		}
//		return value;
//	}
//
//	/**
//	 * 是否为集合类型
//	 * 
//	 * @param type
//	 * @return
//	 */
//	public boolean isCollection(Class<?> type) {
//		boolean isTure = false;
//		if (Collection.class.isAssignableFrom(type)) {// 判断是否为集合类型
//			isTure = true;
//		}
//		return isTure;
//	}
//
//	/**
//	 * 是否为map类型
//	 * 
//	 * @param type
//	 * @return
//	 */
//	public boolean isMap(Class<?> type) {
//		boolean isTure = false;
//		if (Map.class.isAssignableFrom(type)) {// 判断是否为Map类型
//			isTure = true;
//		}
//		return isTure;
//	}
//
//	/**
//	 * 是否为日期类型
//	 * 
//	 * @param type
//	 * @return
//	 */
//	public boolean isDate(Class<?> type) {
//		boolean isTure = false;
//		if (Date.class.isAssignableFrom(type)) {// 判断是否为Map类型
//			isTure = true;
//		}
//		return isTure;
//	}
//
//	
//	/**
//	 * 是否为基本类型
//	 * @param type
//	 * @return
//	 */
//	public boolean isPrimitive(Class<?> type) {
//		boolean isTure = false;
//		if (type.isPrimitive()) {// 判断是否为基本类型
//			isTure = true;
//		} else if (Double.class.equals(type)) {
//			isTure = true;
//		} else if (Float.class.equals(type)) {
//			isTure = true;
//		} else if (Long.class.equals(type)) {
//			isTure = true;
//		} else if (Integer.class.equals(type)) {
//			isTure = true;
//		} else if (Short.class.equals(type)) {
//			isTure = true;
//		} else if (Byte.class.equals(type)) {
//			isTure = true;
//		} else if (Boolean.class.equals(type)) {
//			isTure = true;
//		} else if (Character.class.equals(type)) {
//			isTure = true;
//		}
//		return isTure;
//	}
//
//	
//	/**
//	 * 获取基本类型的值
//	 * @param obj
//	 * @param field
//	 * @return
//	 * @throws SecurityException
//	 * @throws NoSuchMethodException
//	 * @throws Exception
//	 */
//	public Object getBaseTypeValue(final Object obj, final Field field)
//			throws SecurityException, NoSuchMethodException, Exception {
//		Object value = null;
//		Class<?> type = field.getType();
//		if (type.isPrimitive()) {// 判断是否为基本类型
//			if (double.class.equals(type)) {
//				Method m = (Method) obj.getClass().getMethod(
//						GET + firtCharToUpper(field.getName()));
//				value = (Double) m.invoke(obj);
//			} else if (float.class.equals(type)) {
//				Method m = (Method) obj.getClass().getMethod(
//						GET + firtCharToUpper(field.getName()));
//				value = (Float) m.invoke(obj);
//			} else if (long.class.equals(type)) {
//				Method m = (Method) obj.getClass().getMethod(
//						GET + firtCharToUpper(field.getName()));
//				value = (Long) m.invoke(obj);
//			} else if (int.class.equals(type)) {
//				Method m = (Method) obj.getClass().getMethod(
//						GET + firtCharToUpper(field.getName()));
//				value = (Integer) m.invoke(obj);
//			} else if (short.class.equals(type)) {
//				Method m = (Method) obj.getClass().getMethod(
//						GET + firtCharToUpper(field.getName()));
//				value = (Short) m.invoke(obj);
//			} else if (byte.class.equals(type)) {
//				Method m = (Method) obj.getClass().getMethod(
//						GET + firtCharToUpper(field.getName()));
//				value = (Byte) m.invoke(obj);
//			} else if (boolean.class.equals(type)) {
//				Method m = (Method) obj.getClass().getMethod(
//						IS + firtCharToUpper(field.getName()));
//				value = (Boolean) m.invoke(obj);
//			} else if (char.class.equals(type)) {
//				Method m = (Method) obj.getClass().getMethod(
//						GET + firtCharToUpper(field.getName()));
//				value = (Character) m.invoke(obj);
//			}
//		} else if (Double.class.equals(type)) {
//			Method m = (Method) obj.getClass().getMethod(
//					GET + firtCharToUpper(field.getName()));
//			value = (Double) m.invoke(obj);
//		} else if (Float.class.equals(type)) {
//			Method m = (Method) obj.getClass().getMethod(
//					GET + firtCharToUpper(field.getName()));
//			value = (Float) m.invoke(obj);
//		} else if (Long.class.equals(type)) {
//			Method m = (Method) obj.getClass().getMethod(
//					GET + firtCharToUpper(field.getName()));
//			value = (Long) m.invoke(obj);
//		} else if (Integer.class.equals(type)) {
//			Method m = (Method) obj.getClass().getMethod(
//					GET + firtCharToUpper(field.getName()));
//			value = (Integer) m.invoke(obj);
//		} else if (Short.class.equals(type)) {
//			Method m = (Method) obj.getClass().getMethod(
//					GET + firtCharToUpper(field.getName()));
//			value = (Short) m.invoke(obj);
//		} else if (Byte.class.equals(type)) {
//			Method m = (Method) obj.getClass().getMethod(
//					GET + firtCharToUpper(field.getName()));
//			value = (Byte) m.invoke(obj);
//		} else if (Boolean.class.equals(type)) {
//			Method m = (Method) obj.getClass().getMethod(
//					GET + firtCharToUpper(field.getName()));
//			value = (Boolean) m.invoke(obj);
//		} else if (Character.class.equals(type)) {
//			Method m = (Method) obj.getClass().getMethod(
//					GET + firtCharToUpper(field.getName()));
//			value = (Character) m.invoke(obj);// 调用getter方法获取属性值
//		}
//		return value;
//	}
//
//	/**
//	 * 把一个字符串的第一个字母大写、效率是最高的、
//	 * 
//	 * @param name
//	 * @return
//	 * @throws Exception
//	 */
//	public String firtCharToUpper(String name) throws Exception {
//		byte[] items = name.getBytes();
//		if ((char) items[0] >= 'a' && (char) items[0] <= 'z') {
//			items[0] = (byte) ((char) items[0] - 'a' + 'A');
//		}
//		return new String(items);
//	}
//
//	/**
//	 * 把一个字符串的第一个字母小写、效率是最高的、
//	 * 
//	 * @param name
//	 * @return
//	 * @throws Exception
//	 */
//	public String firtCharToLower(String name) throws Exception {
//		byte[] items = name.getBytes();
//		if ((char) items[0] >= 'A' && (char) items[0] <= 'Z') {
//			items[0] = (byte) ((char) items[0] + ('a' - 'A'));
//		}
//		return new String(items);
//	}
//
//	public void setDateToLong(boolean dateToLong) {
//		this.dateToLong = dateToLong;
//	}
//
//	public boolean isDateToLong() {
//		return dateToLong;
//	}
//}
